package es.exitae.ejerciciofinal.provedorCont;

import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import es.exitae.ejerciciofinal.provedorCont.tablas.Lugares;
import es.exitae.ejerciciofinal.utils.Traza;
import es.exitae.ejerciciofinal.utils.enums.Metodo;

public class EjercicioFinalProvider extends ContentProvider
{
	public static final String AUTHORITY = "es.exitae.ejerciciofinal";
	public static final String LUGARES_URI = getStringUri(Lugares.TABLE_NAME);

	private MySQLiteHelper dbHepler;
	private MyUriMacher uriMacher;

	private static String getStringUri(String nombreTabla)
	{
		StringBuilder uri = new StringBuilder();
		uri.append("content://");
		uri.append(AUTHORITY);
		uri.append("/");
		uri.append(nombreTabla);

		Traza.i("Uri: " + uri.toString());
		return uri.toString();
	}

	@Override
	public int delete(Uri uri, String selection, String[] selectionArg)
	{
		Traza.d(Metodo.ENTRADA);
		int contador = 0;

		if (uriMacher.mach(uri) == MyUriMacher.LUGAR_ID)
		{
			selection = modificarSeleccion(selection, uri);
		}

		SQLiteDatabase db = dbHepler.getWritableDatabase();
		contador = db.delete(uri.getPathSegments().get(0), selection, selectionArg);

		Traza.d(Metodo.SALIDA);
		return contador;
	}

	@Override
	public String getType(Uri uri)
	{
		int mach = uriMacher.mach(uri);
		
		switch (mach)
		{
		case MyUriMacher.LUGARES:
			return "vnd.android.cursor.dir/vnd.ejerciciofinal.lugares";
		case MyUriMacher.LUGAR_ID:
			return "vnd.android.cursor.item/vnd.ejerciciofinal.lugares";
		default:
			throw new IllegalArgumentException("Unsupported URI: " + uri);
		}
	}

	@Override
	public Uri insert(Uri uri, ContentValues values)
	{
		Traza.d(Metodo.ENTRADA);
		SQLiteDatabase db = dbHepler.getWritableDatabase();
		
		long id = db.insert(uri.getPathSegments().get(0), null, values);
		
		Uri newUri = ContentUris.withAppendedId(uri, id);
		
		Traza.d(Metodo.SALIDA);
		return newUri;
	}

	@Override
	public boolean onCreate()
	{
		Traza.d(Metodo.ENTRADA);
		uriMacher = new MyUriMacher();
		dbHepler = new MySQLiteHelper(getContext());
		Traza.d(Metodo.SALIDA);
		return dbHepler != null;
	}

	@Override
	public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
	{
		Traza.d(Metodo.ENTRADA);
		if (uriMacher.mach(uri) == MyUriMacher.LUGAR_ID)
		{
			selection = modificarSeleccion(selection, uri);
		}

		SQLiteDatabase db = dbHepler.getReadableDatabase();

		Cursor cursor = db.query(uri.getPathSegments().get(0), projection, selection, selectionArgs, null, null, sortOrder);
		cursor.setNotificationUri(getContext().getContentResolver(), uri);

		Traza.d(Metodo.SALIDA);
		return cursor;
	}

	@Override
	public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
	{
		Traza.d(Metodo.ENTRADA);
		int contador = 0;

		if (uriMacher.mach(uri) == MyUriMacher.LUGAR_ID)
		{
			selection = modificarSeleccion(selection, uri);
		}

		SQLiteDatabase db = dbHepler.getWritableDatabase();
		contador = db.update(uri.getPathSegments().get(0), values, selection, selectionArgs);

		Traza.d(Metodo.SALIDA);
		return contador;
	}

	private String modificarSeleccion(String selection, Uri uri)
	{
		StringBuilder selectionBuilder = new StringBuilder();
		selectionBuilder.append(Lugares._ID);
		selectionBuilder.append(" = ");
		selectionBuilder.append(uri.getLastPathSegment());
		if (selection != null && selection.length() > 0)
		{
			selectionBuilder.append(" and ");
			selectionBuilder.append(selection);
		}

		return selectionBuilder.toString();
	}

}
